<?php
	include_once('clases/Controlador.php');
	
	/**
	 * Controlador que se encarga de las tareas relacionadas con los Eventos.
	 * Tiene los metodos de validar usuario, cerrar session, etc.
	 * 
	 * @author Miguel Angel Villanueva Rengifo.
	 * @version 0.1
	 * @package Controladores
	 *
	 */
	class ControladorEventos extends Controlador {
		/**
		 * Carga la pagina con los Eventos Registrados.
		 *
		 */
		public function Index(){
			
			$pagina=!empty($_REQUEST['pagina'])?$_REQUEST['pagina']:1;
			$resultados_por_pagina=5;
			$total_resultados=0;
			$total_paginas=0;
			
			$eventos = Eventos::getEventos($pagina,$resultados_por_pagina,&$total_resultados,&$total_paginas);
			
			$view = new View('lista_eventos.php');
			
			$view->setVars('eventos',$eventos);
			$view->setVars('pagina',$pagina);
			$view->setVars('total_paginas',$total_paginas);
			$view->setVars('total_resultados',$total_resultados);
			
			$view->Display();
		}
		
		/**
		 * Carga el detalle de un Evento.
		 *
		 * @param intenger $id Codigo de Evento.
		 * @param bool $print Indica si carga el modo impresion.
		 * @param string $mensaje Mensaje que se mostrara en el detalle
		 */
		public function Detalle($id=0,$print=false,$mensaje=''){
			if(empty($id)){
				$id = $_REQUEST['id'];
			}
			
			$asistir =false;
			$partcipantes = array();
			
			if(ControladorEventos::SessionActiva()){
				$asistencia = EventosParticipantes::BuscarAsistencia($id,$_SESSION['id_usu']);
				if(!empty($asistencia))
					$asistir = true;
				$partcipantes = EventosParticipantes::getParcipantesEvento($id);		
			}
			
			$evento = Eventos::getEvento($id);
			
			$evento->visitas++;
			
			$evento->save();
			
			$view = new View('detalle_evento.php');
			if($print){
				$view->setPlantilla('simple');
			}
			
			$view->setVars('evento',$evento);
			$view->setVars('mensaje',$mensaje);
			$view->setVars('asistir',$asistir);
			$view->setVars('participantes',$partcipantes);
			$view->Display();
		}
		
		/**
		 * Cancela la participacion a un Evento de un Usuario.
		 *
		 * @param integer $id_evento Codigo de Evento.
		 * @param integer $id_usuario Codigo de Usuario.
		 * @param integer $vista Indica la vista que se cargara al eliminar asistencia.
		 */
		public function Cancelar($id_evento = 0, $id_usuario = 0,$vista = 0){
			if(Controlador::SessionActiva()){
				
				if(empty($id_evento))
					$id_evento = $_REQUEST['id'];
				
				if(empty($id_usuario))
					$id_usuario	= $_SESSION['id_usu'];
				
				$asistencia = EventosParticipantes::BuscarAsistencia($id_evento,$id_usuario);
				
				$asistencia->delete();
				if($vista==0)
					ControladorEventos::Detalle($id,false,'Se cancelo su asistencia');
				else 
					ControladorEventos::ReporteInscripcion();
				
			}else {
				include_once('controladores/ControladorInstituto.php');
				
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		/**
		 * Carga el reporte de Inscritos a los Eventos.
		 *
		 */
		public function ReporteInscripcion(){
			if(Controlador::SessionActiva()){
				$campos =array();
				
				if(!empty($_POST)){
					if(!empty($_POST['evento']))
						$campos[] = "par.id_evento=".$_POST['evento'];
					if(!empty($_POST['usuario']))
						$campos[] = "par.id_participante=".$_POST['usuario'];
					if(!empty($_POST['fecha_registro_1']))
						$campos[] = "par.fecha_registro>='".$_POST['fecha_registro_1']."'";
					if(!empty($_POST['fecha_registro_2']))
						$campos[] = "par.fecha_registro<='".$_POST['fecha_registro_2']."'";
				}
				
				if($_SESSION['tipo_usuario']!='a'){
					$campos[] = "par.id_participante=".$_SESSION['id_usu'];
				}
				
				$usuarios = Usuarios::getUsuarios();
				$eventos = Eventos::getEventos();
				$inscritos = EventosParticipantes::getParticipantes($campos);
				
				$view = new View('lista_participantes.php');
				
				$view->AddJavaScript('dyndatetime/src/jquery.dynDateTime.js');
				$view->AddJavaScript('dyndatetime/lang/calendar-es.js');
				$view->AddCss('dyndatetime/css/calendar-win2k-cold-1.css');
				
				$view->setVars('inscritos',$inscritos);
				$view->setVars('usuarios',$usuarios);
				$view->setVars('eventos',$eventos);
				$view->setVars('busqueda',$_POST);
				$view->Display();
			}else {
				include_once('controladores/ControladorInstituto.php');
					
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		/**
		 * Genera el PDF del Evento(Detalle)
		 *
		 * @param integer $id Codigo de Evento.
		 */
		public function Pdf($id=0){
			
			if(empty($id)){
				$id = $_REQUEST['id'];
			}
			
			if(!empty($id)){
				
				require_once('librerias/fpdf/fpdf.php');

				$evento = Eventos::getEvento($id);
				
				$pdf=new FPDF();
				$pdf->AddPage();
				$pdf->SetFont('Arial','B',13);
				$pdf->Cell(190,10,$evento->nombre_evento,0,0,'C');
				$pdf->Ln(15);
								
				$pdf->SetFont('Arial','',9);
				
				$pdf->Cell(190,10,"Creado el ".$evento->fecha_registro,0,0,'R');
				$pdf->Ln(10);
				
				if(!empty($evento->direccion)){
					$pdf->Cell(190,10,"Direccion: ".$evento->direccion,0,0,'L');
					$pdf->Ln(5);
				}
				
				if(!empty($evento->lugar)){
					$pdf->Cell(190,10,"Lugar: ".$evento->lugar,0,0,'L');
					$pdf->Ln(5);
				}
				
				if(!empty($evento->telefono)){
					$pdf->Cell(190,10,"Telefono: ".$evento->telefono,0,0,'L');
					$pdf->Ln(5);
				}
				
				if(!empty($evento->correo)){
					$pdf->Cell(190,10,"Correo: ".$evento->correo,0,0,'L');
					$pdf->Ln(5);
				}
				
				if(!empty($evento->precio)){
					$pdf->Cell(190,10,"Precio: ".$evento->precio,0,0,'L');
					$pdf->Ln(5);
				}
				
				if(!empty($evento->expositor)){
					$pdf->Cell(190,10,"Expositor: ".$evento->expositor,0,0,'L');
				}
				$pdf->Ln(8);
				
				$pdf->SetFont('Arial','',12);
				
				$pdf->SetAutoPageBreak(true, 5); 
			
				$pdf->MultiCell(190, 4, $evento->descripcion, 0, "J"); 
				
				$pdf->Ln(5);
				$pdf->SetFont('Arial','',9);
				$pdf->Cell(190,10,Util::CodificarCaracteres("Última actualización el ".$evento->fecha_modificacion),0,0,'R');
				
				$pdf->Output();
				
			}else {
				echo 'No existe Evento.';
			}
		}
		
		/**
		 * Carga la vista para el modo impresion.
		 *
		 * @param integer $id Codigo de Evento.
		 */
		public function Imprimir($id=0){
			if(empty($id)){
				$id = $_REQUEST['id'];
			}
			
			if(!empty($id)){
				ControladorEventos::Detalle($id,true);
				
			}else {
				echo "No Existe Evento.";
			}
		}
		
		/**
		 * Carga el reporte de Eventos registrados.
		 *
		 */
		public function ReporteEventos($buscador=true){
			if(Controlador::SessionActiva() && Controlador::EsAdministrador()){
				$campos =array();
				
				if(!empty($_POST)){
					if(!empty($_POST['tipo_evento']))
						$campos[] = "eve.id_tipo_evento=".$_POST['tipo_evento'];
					if(!empty($_POST['nombre_evento']))
						$campos[] = "eve.nombre_evento LIKE '%".$_POST['nombre_evento']."%'";
					if(!empty($_POST['direccion']))
						$campos[] = "eve.direccion LIKE '%".$_POST['direccion']."%'";
					if(!empty($_POST['lugar']))
						$campos[] = "eve.lugar LIKE '%".$_POST['lugar']."%'";
					if(!empty($_POST['precio']))
						$campos[] = "eve.precio LIKE '%".$_POST['precio']."%'";
					if(!empty($_POST['expositor']))
						$campos[] = "eve.expositor LIKE '%".$_POST['expositor']."%'";
					if(!empty($_POST['fecha_registro_1']))
						$campos[] = "eve.fecha_registro>='".$_POST['fecha_registro_1']."'";
					if(!empty($_POST['fecha_registro_2']))
						$campos[] = "eve.fecha_registro<='".$_POST['fecha_registro_2']."'";
				}
								
				$eventos = Eventos::getEventosReporte($campos);
				$tipos = TipoEventos::getTipoEventos();
				
				$view = new View('reporte_eventos.php');
				
				$view->AddJavaScript('dyndatetime/src/jquery.dynDateTime.js');
				$view->AddJavaScript('dyndatetime/lang/calendar-es.js');
				$view->AddCss('dyndatetime/css/calendar-win2k-cold-1.css');
				
				$view->setVars('eventos',$eventos);
				$view->setVars('tipos',$tipos);
				$view->setVars('busqueda',$buscador?$_POST:array());
				$view->Display();
			}else{
				if(!Controlador::SessionActiva()){
					include_once('controladores/ControladorInstituto.php');
					
					ControladorInstituto::Login('Debe iniciar session para acceder al contenido.');
				}else {
					$view = new View('no_acceso.php');
					$view->Display();
				}
			}
		}
		
		/**
		 * Carga la vista para agregar un Evento.
		 *
		 */
		public function AgregarEvento(){
			if(Controlador::SessionActiva() && Controlador::EsAdministrador()){
				$tipos = TipoEventos::getTipoEventos();
				
				$view = new View('add_evento.php');
				$view->AddJavaScript('tinymce/jscripts/tiny_mce/tiny_mce.js');
				$view->AddJavaScript('tinymce/jscripts/tiny_mce/langs/es.js');
				$view->setVars('tipos',$tipos);
				$view->Display();
				
			}else {
				include_once('controladores/ControladorInstituto.php');
				
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		/**
		 * Metodo que carga el formulario o vista para agregar asistencia a un evento.
		 *
		 */
		public function AgregarAsistencia(){
			if(Controlador::SessionActiva()){
				$usuarios = Usuarios::getUsuarios();
				$eventos = Eventos::getEventos();
				
				$view = new View('add_asistencia.php');
				$view->setVars('usuarios',$usuarios);
				$view->setVars('eventos',$eventos);
				$view->Display();	
				
			}else {
				include_once('controladores/ControladorInstituto.php');
				
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		public function RegistrarAsistencia(){
			if(Controlador::SessionActiva()){
				$evento = $_REQUEST['evento'];
				$usuario = $_REQUEST['usuario'];
				
				if(!$this->RegistroAsistencia($evento,$usuario)){
					$asistencia = new EventosParticipantes();
					
					$asistencia->id_evento = $evento;
					$asistencia->id_participante = $usuario;
					$asistencia->id_registro = $_SESSION['id_usu'];
					$asistencia->fecha_registro = date('Y-m-d H:m:i');
					
					$asistencia->save();
					
				}
				ControladorEventos::ReporteInscripcion();
					
			}else {
				include_once('controladores/ControladorInstituto.php');
					
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		/**
		 * Registrar un Evento en la BD.
		 *
		 */
		public function RegistrarEvento(){
			if(Controlador::SessionActiva()){
				if(empty($_REQUEST['id'])){
					$evento = new Eventos();
					$evento->fecha_registro = date('Y-m-d H:m:i');
				}else{ 
					$evento = Eventos::getEvento($_REQUEST['id']);
				}
				$evento->fecha_modificacion = date('Y-m-d H:m:i');
					
				$evento->id_tipo_evento = $_REQUEST['tipo_evento'];
				$evento->id_personal = 1;
				$evento->nombre_evento = Util::CodificarCaracteres(Util::LimpiarEspacios($_REQUEST['nombre_evento']));
				$evento->direccion = Util::CodificarCaracteres(Util::LimpiarEspacios($_REQUEST['direccion']));
				$evento->lugar = Util::CodificarCaracteres(Util::LimpiarEspacios($_REQUEST['lugar']));
				$evento->telefono = Util::LimpiarEspacios($_REQUEST['telefono']);
				$evento->correo = Util::LimpiarEspacios($_REQUEST['correo']);
				$evento->descripcion = Util::CodificarCaracteres(Util::LimpiarEspacios($_REQUEST['descripcion']));
				$evento->expositor = Util::CodificarCaracteres(Util::LimpiarEspacios($_REQUEST['expositor']));
				$evento->precio = Util::CodificarCaracteres(Util::LimpiarEspacios($_REQUEST['precio']));
				$evento->estado = $_REQUEST['estado'];
								
				$evento->save();
				
				if(!empty($_FILES)){				
					if(!empty($_FILES["portada"]['name'])){
						Util::SubirArchivo($_FILES["portada"],DIR_PORTADA_EVENTOS.$evento->id_evento);
						
						if(!empty($_FILES['portada']['name']))
							$evento->portada = $evento->id_evento.Util::getExtension($_FILES['portada']['type']);		
					}
					
					if(!empty($_FILES["banner"]['name'])){
						Util::SubirArchivo($_FILES["banner"],DIR_BANNERS.$evento->id_evento);
						
						if(!empty($_FILES['banner']['name']))
							$evento->banner = $evento->id_evento.Util::getExtension($_FILES['banner']['type']);		
					}
					
					$evento->save();
				}
				
				unset($_POST);
				ControladorEventos::ReporteEventos($buscador=false);
				
			}else {
				include_once('controladores/ControladorInstituto.php');
				
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		/**
		 * Carga el formulario o vista para editar un Evento.
		 *
		 */
		public function FormEditEvento(){
			if(Controlador::SessionActiva()){
				$id = $_REQUEST['id'];
				
				$evento = Eventos::getEvento($id);
				$tipos = TipoEventos::getTipoEventos();
				
				$view = new View('edit_evento.php');
				$view->AddJavaScript('tinymce/jscripts/tiny_mce/tiny_mce.js');
				$view->AddJavaScript('tinymce/jscripts/tiny_mce/langs/es.js');
				$view->setVars('evento',$evento);
				$view->setVars('tipos',$tipos);
				$view->Display();
				
			}else {
				include_once('controladores/ControladorInstituto.php');
				
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		/**
		 * Funcion para registrar asistencia de un Usuario a un Evento.
		 *
		 */
		public function Asistir(){
			
			if(Controlador::SessionActiva()){
				//print_r($_SESSION);
				$mensaje = '';
				$id_evento = $_REQUEST['id'];
				
				if(!$this->RegistroAsistencia($id_evento,$_SESSION['id_usu'])){
					$asistencia = new EventosParticipantes();
					$asistencia->id_evento = $id_evento;
					$asistencia->id_participante = $_SESSION['id_usu'];
					$asistencia->id_registro = $_SESSION['id_usu'];
					$asistencia->fecha_registro = date('Y-m-d H:m:i');
				
					$asistencia->save();
					
					$mensaje = "Su asistencia ha sido registrada.";
				}else {
					$mensaje = 'Usted ya registro su participacion anteriormente';
				}
				
				ControladorEventos::Detalle($id_evento,false,$mensaje);
				
			}else {
				include_once('controladores/ControladorInstituto.php');
				
				ControladorInstituto::Login('Debe iniciar session.');
			}
		}
		
		/**
		 * Funcion para verificar la existencia de asistencia de un Usuario a un Evento.
		 *
		 * @param integer $id_evento Codigo de Evento.
		 * @param integer $id_usuario Codigo de Usuario.
		 * @return boolean
		 */
		private function RegistroAsistencia($id_evento,$id_usuario){
			$asistencia = EventosParticipantes::BuscarAsistencia($id_evento,$id_usuario);
			if(!empty($asistencia))
				return true;
			else 
				return false;
		}
		
		/**
		 * Elimina un Evento por su codigo.
		 *
		 * @param integer $id Codigo de Evento.
		 */
		public function DelEvento($id = 0){
			if(Controlador::SessionActiva() && Controlador::EsAdministrador()){
				if(!empty($id))
					$id = $_REQUEST['id'];
				$evento = Eventos::getEvento($id);
				
				$evento->delete();
				
				ControladorEventos::ReporteEventos();	
					
			}else {
				if(!Controlador::SessionActiva()){
					include_once('controladores/ControladorInstituto.php');
					
					ControladorInstituto::Login('Debe iniciar session.');
				}else {
					$view = new View('no_acceso.php');
					$view->Display();
				}
			}
		}
		
		public function GrillaEventosPdf(){
			include_once('clases/ExportarPdf.php');
			
			$campos =array();
							
			if(!empty($_REQUEST['tipo_evento']))
				$campos[] = "eve.id_tipo_evento=".$_REQUEST['tipo_evento'];
			if(!empty($_REQUEST['nombre_evento']))
				$campos[] = "eve.nombre_evento LIKE '%".$_REQUEST['nombre_evento']."%'";
			if(!empty($_REQUEST['direccion']))
				$campos[] = "eve.direccion LIKE '%".$_REQUEST['direccion']."%'";
			if(!empty($_REQUEST['lugar']))
				$campos[] = "eve.lugar LIKE '%".$_REQUEST['lugar']."%'";
			if(!empty($_REQUEST['precio']))
				$campos[] = "eve.precio LIKE '%".$_REQUEST['precio']."%'";
			if(!empty($_REQUEST['expositor']))
				$campos[] = "eve.expositor LIKE '%".$_REQUEST['expositor']."%'";
			if(!empty($_REQUEST['fecha_registro_1']))
				$campos[] = "eve.fecha_registro>='".$_REQUEST['fecha_registro_1']."'";
			if(!empty($_REQUEST['fecha_registro_2']))
				$campos[] = "eve.fecha_registro<='".$_REQUEST['fecha_registro_2']."'";
			
			$eventos = Eventos::getEventosReporte($campos);
			
			$datos = array();
			$fila = array();
			
			foreach ($eventos as $evento){
				$fila[] = $evento->id_evento;
				$fila[] = $evento->nombre_evento;
				$fila[] = $evento->TipoEventos->nombre_evento;
				$fila[] = Util::DecodificarCaracteres($evento->lugar);
				$fila[] = $evento->expositor;
				$fila[] = $evento->fecha_registro;
				$fila[] = $evento->visitas;
								
				$datos[] = $fila;
				$fila = array();
			}
			
			$cabeceras = array('Codigo','Evento','Tipo',"Lugar",'Expositor','Fecha Registro','Visitas');
			$tamallos = array('10','30','30','30','30','20','15');
			
			ExportarPdf::GenerarGrilla('Reporte de Eventos',$cabeceras,$datos,$tamallos);	
		}
		
		public function GrillaParticipantesPdf(){
			include_once('clases/ExportarPdf.php');
			
			$campos =array();
			
			if(!empty($_REQUEST['evento']))
				$campos[] = "par.id_evento=".$_REQUEST['evento'];
			if(!empty($_REQUEST['usuario']))
				$campos[] = "par.id_participante=".$_REQUEST['usuario'];
			if(!empty($_REQUEST['fecha_registro_1']))
				$campos[] = "par.fecha_registro>='".$_REQUEST['fecha_registro_1']."'";
			if(!empty($_REQUEST['fecha_registro_2']))
				$campos[] = "par.fecha_registro<='".$_REQUEST['fecha_registro_2']."'";
				
			$inscritos = EventosParticipantes::getParticipantes($campos);
			
			$datos = array();
			$fila = array();
			
			foreach ($inscritos as $inscrito){
				$fila[] = $inscrito->Eventos->nombre_evento;
				$fila[] = Util::TodoMayusculas($inscrito->Usuarios->apellidos.' '.$inscrito->Usuarios->nombres);
				$fila[] = $inscrito->fecha_registro;
												
				$datos[] = $fila;
				$fila = array();
			}
			
			$cabeceras = array('Evento','Participante','Fecha Registro');
			$tamallos = array('70','70','20');
			
			ExportarPdf::GenerarGrilla('Reporte de Participantes',$cabeceras,$datos,$tamallos);	
		}
	}
?>